package com.example.ivideo_2211a.home

import com.example.common.mvi.BaseRepository
import com.example.common.mvi.NetworkResult
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import com.example.common.mvi.NetworkConfig

/**
 * Home页面的数据仓库
 */
// ... existing code ...
/**
 * Home页面的数据仓库
 */
class HomeRepository : BaseRepository() {

    // 懒加载创建HomeApi接口实例
    private val api: HomeApi by lazy {
        Retrofit.Builder()
            .baseUrl("http://10.161.9.80:7015/")
            .client(NetworkConfig.createOkHttpClient())
            .addConverterFactory(GsonConverterFactory.create(NetworkConfig.createGson()))
            .build()
            .create(HomeApi::class.java)
    }

    /**
     * 获取推荐视频列表
     * @param page 页码
     * @param pageSize 每页大小，默认为10
     * @return 返回包含网络结果的Flow对象，其中包含视频列表数据
     */
    fun getRecommendVideos(page: Int, pageSize: Int = 10): Flow<NetworkResult<List<HomeData>>> {
        // 调用安全的API请求，并对结果进行转换处理
        return safeApiCall {
            api.getRecommendVideos(page, pageSize)
        }.map { result ->
            when (result) {
                is NetworkResult.Success -> {
                    val entity = result.data
                    // 判断服务器返回的状态码，200表示成功
                    if (entity.code == 200) {
                        NetworkResult.Success(entity.data)
                    } else {
                        NetworkResult.Error(Exception(entity.msg))
                    }
                }
                is NetworkResult.Error -> result
                is NetworkResult.Loading -> result
            }
        }
    }
}
// ... existing code ...
